#!/usr/bin/env python3
"""
基本功能测试
验证系统核心功能是否正常工作
"""

import sys
import os

def test_chromadb_detection():
    """测试ChromaDB检测功能"""
    print("=== ChromaDB检测测试 ===")
    
    try:
        from utils.chroma_db import HAS_CHROMADB
        print(f"✅ HAS_CHROMADB = {HAS_CHROMADB}")
        return True
    except Exception as e:
        print(f"❌ ChromaDB检测失败: {e}")
        return False

def test_knowledge_base():
    """测试知识库功能"""
    print("\n=== 知识库功能测试 ===")
    
    try:
        from utils.knowledge_base import KnowledgeBase
        
        # 创建测试知识库
        kb = KnowledgeBase(dir_path="./test_kb")
        print("✅ 知识库实例创建成功")
        
        # 测试添加问答对
        kb.add_qa_pair("测试问题", "测试答案")
        print("✅ 问答对添加成功")
        
        # 测试匹配问题
        result = kb.match_question("测试问题")
        if result:
            matched_question, answers = result
            print(f"✅ 问题匹配成功: '{matched_question}' -> {len(answers)} 个答案")
        else:
            print("⚠️  问题未匹配到结果（可能是向量数据库未初始化）")
        
        return True
        
    except Exception as e:
        print(f"❌ 知识库功能测试失败: {e}")
        return False

def test_vector_db():
    """测试向量数据库功能"""
    print("\n=== 向量数据库功能测试 ===")
    
    try:
        from utils.vector_db import KnowledgeVectorDB
        
        # 创建向量数据库
        vector_db = KnowledgeVectorDB("./test_vector_db")
        print("✅ 向量数据库实例创建成功")
        
        # 测试初始化
        vector_db._init_vector_dbs()
        print("✅ 向量数据库初始化成功")
        
        return True
        
    except Exception as e:
        print(f"❌ 向量数据库功能测试失败: {e}")
        return False

def test_config_manager():
    """测试配置管理功能"""
    print("\n=== 配置管理功能测试 ===")
    
    try:
        from utils.config_manager import ConfigManager
        
        # 创建配置管理器
        config = ConfigManager()
        print("✅ 配置管理器创建成功")
        
        # 测试获取配置
        models = config.get_model_names()
        print(f"✅ 获取模型配置成功: {len(models)} 个模型")
        
        roles = config.get_role_names()
        print(f"✅ 获取角色配置成功: {len(roles)} 个角色")
        
        return True
        
    except Exception as e:
        print(f"❌ 配置管理功能测试失败: {e}")
        return False

def cleanup():
    """清理测试文件"""
    print("\n=== 清理测试文件 ===")
    
    test_dirs = [
        "./test_kb",
        "./test_vector_db"
    ]
    
    for test_dir in test_dirs:
        if os.path.exists(test_dir):
            import shutil
            shutil.rmtree(test_dir)
            print(f"✅ 清理目录: {test_dir}")

def main():
    """主测试函数"""
    print("🔍 开始基本功能测试")
    print("="*60)
    
    # 运行测试
    tests = [
        test_chromadb_detection,
        test_knowledge_base,
        test_vector_db,
        test_config_manager
    ]
    
    results = []
    for test in tests:
        results.append(test())
    
    # 清理
    cleanup()
    
    # 输出结果
    print("\n" + "="*60)
    print("📋 基本功能测试结果")
    print("="*60)
    
    test_names = ["ChromaDB检测", "知识库功能", "向量数据库", "配置管理"]
    for i, (name, result) in enumerate(zip(test_names, results), 1):
        status = "✅ 通过" if result else "❌ 失败"
        print(f"   {i}. {name}: {status}")
    
    # 总体评估
    if all(results):
        print("\n🎉 所有基本功能测试通过！")
        print("💡 系统核心功能正常")
        return 0
    else:
        print("\n⚠️  部分功能测试失败")
        print("🔧 请检查错误信息")
        return 1

if __name__ == "__main__":
    sys.exit(main())